/**
 案例一：实现数制间的相互转换
 */

(function(){

    function Stack(){
        this.dataStore = []; //初始化为空
        this.top = 0; // 记录栈顶位置，初始化为0
        this.pop = pop; // 出栈
        this.push = push; // 入栈
        this.peek = peek; // 查看栈顶元素
        this.length =length; // 查看栈内元素总数
        this.clear = clear; // 清空栈
    }

    function push(element){
        this.dataStore[this.top++] = element;
    }

    function pop(){
        return this.dataStore[--this.top];
    }

    function peek(){
        if( this.top > 0 ) return this.dataStore[this.top-1];
        else return 'Empty';
    }

    function length(){
        return this.top;
    }

    function clear(){
        delete this.dataStore;
        this.dataStore = [];
        this.top = 0;
    }

    this.Stack = Stack
})(this)

//进制转换（2-9）
function mulBase(num,base){
    var stack = new Stack();

    while( num > 0 ){
        stack.push( num % base );
        num = Math.floor( num /= base );
    }
    var converted = '';
    while (stack.length() > 0){
        converted += stack.pop();
    }
    return converted;
}

console.log( mulBase( 125 , 2 ) );  // 1111101
console.log( mulBase( 125 , 8 ) );      // 175





/**
 案列2：判断一个字符串是不是回文

 把字符串从左到右依次压入栈，
 这样，栈中保存了该字符串反转后的字符，
 我们再依次出栈，
 通过比较出栈后的字符串是否与原字符串是否相等，
 就可判断该字符串是否是回文。
 */

function isPalindrome ( word ) {
    var s = new Stack();
    for( var i = 0 ; i < word.length ; i ++ ){
        s.push( word[i] );
    }
    var rword = '';
    while( s.length() > 0 ){
        rword += s.pop();
    }

    if( word == rword ){
        return true;
    }else{
        return false;
    }
}

console.log( isPalindrome('level') )    // true
console.log( isPalindrome('1001') )     // true
console.log( isPalindrome('word') )     // false